#!/usr/bin/python
# -*- coding:utf-8 -*-
f=open(r'd:/creator/forward.txt','w')
f.truncate()
a = 4  #输入个数+1
b = 3  #隐含个数+1
c = 2  #输出个数+1
#######################模块声明############################
f.write('module forward(')#定义模块名字
for i in range(1,a):#定义输入
	f.write('x'+str(i)+',')
f.write('\n')
for i in range(1,a):#输入神经元个数
	for j in range(1,b):#隐含层神经元个数
		f.write('w'+'_'+str(i)+'_'+str(j)+',')
f.write('\n')
for i in range(1,b):
	f.write('th_h_'+str(i)+',')
f.write('\n')
for i in range(1,b):
	for j in range(1,c):
		f.write('v'+'_'+str(i)+'_'+str(j)+',')
f.write('\n')
for i in range(1,c):
	f.write('th_o_'+str(i)+',')
f.write('\n')
for i in range(1,c):
	f.write('o_out_'+str(i)+',')
f.write('\n')
f.write('clk,en);')
#################input端口声明##################################
f.write('\ninput [3:0]')
for i in range(1,a):#定义输入
	f.write('x'+str(i)+',')
f.write('\n')
for i in range(1,a):#定义输入和隐含层之间的权重
	for j in range(1,b):
		f.write('w'+'_'+str(i)+'_'+str(j)+',')
f.write('\n')
for i in range(1,b):
	f.write('th_h_'+str(i)+',')
f.write('\n')

for i in range(1,b):#定义隐含层和输出层之间的权重
	for j in range(1,c):
		f.write('v'+'_'+str(i)+'_'+str(j)+',')
#for i in range(1,c):#定义输出层的偏置
#	f.write('th_o_'+str(i)+',')########改分号
if c>0:
    for i in range(1,c-1):
        f.write('th_o_'+str(i)+',')
    f.write('th_o_'+str(c-1)+';')
else:
    f.write('th_o_'+str(c-1)+';')
 
f.write('\ninput clk,en;')#定义时钟和使能
f.write('\noutput [7:0] ')#定义输出层
#for i in range(1,c):
#	f.write('o_out_'+str(i)+',')########改分号##############output端口声明################

if c>1:
    for i in range(1,c-1):
        f.write('o_out_'+str(i)+',')
    f.write('o_out_'+str(c-1)+';')
else:
    f.write('o_out_'+str(c-1)+';')
    
    
f.write('\nwire [7:0] ')
#for i in range(1,b):
#	f.write('l'+'_'+str(i)+',')  #############改分号###################	

if b>1:
    for i in range(1,b-1):
        f.write('l_'+str(i)+',')
    f.write('l_'+str(c-1)+';')
else:
    f.write('l_'+str(c-1)+';')
f.write('\n')

for i in range(1,b):#元件例化，括号里面是外部端口，括号外面是本地端口
	f.write('\nhiden_node h'+str(i)+'(')
	for j in range(1,a):
		f.write('.x'+str(j)+'(x'+str(j)+'),')
	for k in range(1,a):
		f.write('.w'+str(k)+'(w_'+str(k)+'_'+str(i)+'),')
	f.write('.th_h(th_h_'+str(i)+'),')
	f.write('.h_out(l_'+str(i)+'),')
	f.write('.clk(clk),.en(en));')
f.write('\n')
for i in range(1,c):
	f.write('\noutput_node o'+str(i)+'(')
	for j in range(1,b):
		f.write('.y'+str(j)+'(l_'+str(j)+'),')
	for k in range(1,b):
		f.write('.v'+str(k)+'(v_'+str(k)+'_'+str(i)+'),')
	f.write('.th_o(th_o_'+str(i)+'),')
	f.write('.o_out(o_out_'+str(i)+'),')
	f.write('.clk(clk),.en(en));')
f.write('\n')
f.write('\nendmodule')	
f.close()
	